Skip to content
This repository was archived by the owner on Jul 16, 2025. It is now read-only.

feat: add support for Anthropic tool use #209

Merged
merged 1 commit into from
Apr 12, 2025

Conversation

soukicz
Copy link
Contributor

@soukicz soukicz commented Feb 7, 2025

I have added Anthropic tool use support but I cannot figure out how to preserve text content that is sent with tool use request. I have tried to copy OpenAI function calling but that seems to loose text content during function call too.

@chr-hertel
Copy link
Member

Hey, thanks for working on this!

Can you describe what you mean with "loose text content" please? Not sure i can follow.

An example with code and expectated behavior would be great

@soukicz
Copy link
Contributor Author

soukicz commented Feb 8, 2025

I was working mostly with Anthropic and it might be specific only to them. There is always included chain of thought in tool use request:

(it is the <thinking> part)

curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-3-5-sonnet-20241022",
    "max_tokens": 1024,
    "tools": [
        {
            "name": "get_weather",
            "description": "Get the current weather in a given location",
            "input_schema": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city and state, e.g. San Francisco, CA"
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "The unit of temperature, either \"celsius\" or \"fahrenheit\""
                    }
                },
                "required": ["location"]
            }
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": "What is the weather like in San Francisco?"
        },
        {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "<thinking>I need to use get_weather, and the user wants SF, which is likely San Francisco, CA.</thinking>"
                },
                {
                    "type": "tool_use",
                    "id": "toolu_01A09q90qw90lq917835lq9",
                    "name": "get_weather",
                    "input": {
                        "location": "San Francisco, CA",
                        "unit": "celsius"
                    }
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "type": "tool_result",
                    "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
                    "content": "15 degrees"
                }
            ]
        }
    ]
}'

https://docs.anthropic.com/en/docs/build-with-claude/tool-use#single-tool-example

Copy link
Member

@chr-hertel chr-hertel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's merge this in finally - and build up on this.

Sorry for the delay and thanks for your work! 🙏

@chr-hertel chr-hertel merged commit 375a11f into php-llm:main Apr 12, 2025
7 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants